home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso
/
misc
/
coding
/
pump_src
/
convert.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-24
|
2KB
|
88 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
//
// Raw to RLE (run length encoded) converter
//
typedef unsigned char byte;
int Encode(byte *pix, byte *rle) {
int nbytes = 0;
byte curbyte = *pix;
int howmany = 0;
byte *dest = rle;
byte *src = pix;
for (;;) {
if (pix - src == 320*200) {
*dest++ = howmany;
*dest++ = curbyte;
*dest++ = 0;
*dest++ = 0;
return dest - rle;
}
if (howmany == 255) {
*dest++ = howmany;
*dest++ = curbyte;
howmany = 0;
curbyte = *pix;
continue;
}
if (*pix != curbyte) {
*dest++ = howmany;
*dest++ = curbyte;
howmany = 0;
curbyte = *pix;
continue;
} else {
howmany++;
pix++;
}
}
}
main(int argc, char *argv[]) {
FILE *fdin, *fdout;
byte *buf;
byte *buf2;
int size;
if (argc != 3) {
printf("CONVERT <pixfile> <outfile>\n");
return 1;
}
fdin = fopen(argv[1], "rb");
if (!fdin) {
printf("Cannot openread\n");
return 1;
}
fdout = fopen(argv[2], "wb");
if (!fdout) {
printf("Cannot create\n");
return 1;
}
buf = malloc(320*200);
buf2 = malloc(100000);
if (!buf || !buf2) {
printf("outamem\n");
return 1;
}
if (fread(buf, 320, 200, fdin) != 200) {
printf("Cannot read\n");
return 1;
}
fclose(fdin);
size = Encode(buf, buf2);
fwrite(buf2, 1, size, fdout);
fclose(fdout);
printf("ok");
return 0;
}